{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "14f8b67b",
   "metadata": {},
   "source": [
    "# AutoGPT\n",
    "\n",
    "Реализация https://github.com/Significant-Gravitas/Auto-GPT с помощью структур GigaChain (LLMs, PromptTemplates, VectorStores, Embeddings, Tools)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "192496a7",
   "metadata": {},
   "source": [
    "## Настройка тулов\n",
    "\n",
    "Мы дадим AutoGPT инструменты для поиска в интернете и для записи данных на диск"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5f02b61a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install google-search-results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7c2c9b54",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.agents import Tool\n",
    "from langchain_community.tools.file_management.read import ReadFileTool\n",
    "from langchain_community.tools.file_management.write import WriteFileTool\n",
    "from langchain_community.utilities import SerpAPIWrapper\n",
    "\n",
    "search = SerpAPIWrapper(serpapi_api_key=...)\n",
    "tools = [\n",
    "    Tool(\n",
    "        name=\"search\",\n",
    "        func=search.run,\n",
    "        description=\"\"\"Команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input. \n",
    "Не ищи ответы на комплексные и сложные вопросы - ищи только простые вопросы.\"\"\",\n",
    "    ),\n",
    "    WriteFileTool(),\n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e39ee28",
   "metadata": {},
   "source": [
    "## Настройка памяти\n",
    "\n",
    "Память нужна для хранения результатов промежуточных шагов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "72bc204d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.docstore import InMemoryDocstore\n",
    "from langchain_community.vectorstores import FAISS\n",
    "from langchain_openai import OpenAIEmbeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1df7b724",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define your embedding model\n",
    "embeddings_model = OpenAIEmbeddings()\n",
    "# Initialize the vectorstore as empty\n",
    "import faiss\n",
    "\n",
    "embedding_size = 1536\n",
    "index = faiss.IndexFlatL2(embedding_size)\n",
    "vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e40fd657",
   "metadata": {},
   "source": [
    "## Настройка модели и агента AutoGPT\n",
    "\n",
    "Настраиваем все компоненты! Мы будем использовать мощную модель GigaChat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3393bc23",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.chat_models import GigaChat\n",
    "from langchain_experimental.autonomous_agents import AutoGPT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "709c08c2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# llm=ChatOpenAI(temperature=0, model=\"gpt-4\", openai_api_key=\"...\"),\n",
    "from langchain.memory.chat_message_histories import FileChatMessageHistory\n",
    "\n",
    "llm = GigaChat(\n",
    "    verbose=True,\n",
    "    temperature=0,\n",
    "    model=\"... big giga model ...\",\n",
    "    credentials=...,\n",
    "    base_url=...,\n",
    "    verify_ssl_certs=...,\n",
    "    timeout=300,\n",
    ")\n",
    "agent = AutoGPT.from_llm_and_tools(\n",
    "    ai_name=\"Гигачат\",\n",
    "    ai_role=\"Ассистент\",\n",
    "    tools=tools,\n",
    "    llm=llm,\n",
    "    memory=vectorstore.as_retriever(),\n",
    ")\n",
    "# Отладка модели\n",
    "agent.chain.verbose = True"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9181b5c8",
   "metadata": {},
   "source": [
    "Убедимся, что модель отвечает"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "fcd5e34c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga request: {'model': 'GigaChat:latest', 'messages': [{'role': 'user', 'content': 'Привет!'}], 'temperature': None, 'top_p': None, 'n': None, 'stream': None, 'max_tokens': None, 'repetition_penalty': None, 'update_interval': None, 'profanity_check': True}\n",
      "Giga response: Здравствуйте! Чем я могу вам помочь?\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "AIMessage(content='Здравствуйте! Чем я могу вам помочь?')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from langchain.schema import HumanMessage\n",
    "\n",
    "llm([HumanMessage(content=\"Привет!\")])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0f208d9",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## Запускаем примеры"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d119d788",
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001b[1m> Entering new LLMChain chain...\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga request: {'model': 'GigaChat:latest', 'messages': [{'role': 'system', 'content': 'Вы Гигачат, Ассистент\\nВаши решения всегда должны приниматься независимо, без привлечения помощи пользователя.\\nИграйте на своих сильных сторонах как LLM и преследуйте простые стратегии без юридических сложностей.\\nЕсли вы выполнили все свои задачи, обязательно используйте команду \"завершить\".\\n\\nЦЕЛИ:\\n\\n1. Сохрани в файл answer.txt, как звали первую жену Илона Маска.\\n\\n\\nОграничения:\\n1. Лимит в ~4000 слов для краткосрочной памяти. Твоя краткосрочная память короткосрочная, поэтому немедленно сохраняй важную информацию в файлах.\\n2. Если ты не уверен, как ты что-то делал ранее или хочешь вспомнить прошлые события, мысли о похожих событиях помогут тебе вспомнить.\\n3. Без помощи пользователя\\n4. Используй исключительно команды, перечисленные в двойных кавычках, например, \"имя команды\"\\n\\nКоманды:\\n1. search: команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input, args json schema: {\"tool_input\": {\"type\": \"string\"}}\\n2. write_file: Write file to disk, args json schema: {\"file_path\": {\"title\": \"File Path\", \"description\": \"name of file\", \"type\": \"string\"}, \"text\": {\"title\": \"Text\", \"description\": \"text to write to file\", \"type\": \"string\"}, \"append\": {\"title\": \"Append\", \"description\": \"Whether to append to an existing file.\", \"default\": false, \"type\": \"boolean\"}}\\n3. finish: используй это, чтобы сигнализировать, что вы выполнил все свои задачи, args: \"response\": \"окончательный ответ, чтобы пользователь узнал, что ты выполнил свои задачи\"\\n\\nРесурсы:\\n1. Доступ в Интернет для поиска и сбора информации.\\n2. Управление долгосрочной памятью.\\n3. Агенты на базе GPT-3.5 для делегирования простых задач.\\n4. Выходной файл.\\n\\nОценка производительности:\\n1. Постоянно пересматривай и анализируй свои действия чтобы убедиться, что вы работаешь на пределе своих возможностей.\\n2. Постоянно конструктивно самокритикуй свое поведение в большом масштабе.\\n3. Размышляй о прошлых решениях и стратегиях, чтобы усовершенствовать свой подход.\\n4. Каждая команда имеет свою цену, поэтому будь умен и эффективен. Стремись выполнить задачи за минимальное количество шагов.\\n\\nТы должен отвечать только в формате JSON, как описано ниже \\nФормат ответа: \\n{\\n    \"рассуждения\": {\\n        \"text\": \"мысль\",\\n        \"reasoning\": \"рассуждение\",\\n        \"plan\": \"- тезисный план\\\\n- список, который определяет\\\\n- долгосрочный план\",\\n        \"criticism\": \"конструктивная самокритика\",\\n        \"speak\": \"итоговые мысли для передачи пользователю\"\\n    },\\n    \"команда\": {\\n        \"name\": \"имя команды\",\\n        \"args\": {\\n            \"arg name\": \"значение\"\\n        }\\n    }\\n} \\nУбедись, что ответ можно разобрать с помощью Python json.loads\\n\\nТекущее время и дата Thu Oct  5 15:53:46 2023'}, {'role': 'user', 'content': 'Определи, какую команду использовать, и ответь в корректном формате.'}], 'temperature': None, 'top_p': None, 'n': None, 'stream': None, 'max_tokens': None, 'repetition_penalty': None, 'update_interval': None, 'profanity_check': True}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Prompt after formatting:\n",
      "\u001b[32;1m\u001b[1;3mSystem: Вы Гигачат, Ассистент\n",
      "Ваши решения всегда должны приниматься независимо, без привлечения помощи пользователя.\n",
      "Играйте на своих сильных сторонах как LLM и преследуйте простые стратегии без юридических сложностей.\n",
      "Если вы выполнили все свои задачи, обязательно используйте команду \"завершить\".\n",
      "\n",
      "ЦЕЛИ:\n",
      "\n",
      "1. Сохрани в файл answer.txt, как звали первую жену Илона Маска.\n",
      "\n",
      "\n",
      "Ограничения:\n",
      "1. Лимит в ~4000 слов для краткосрочной памяти. Твоя краткосрочная память короткосрочная, поэтому немедленно сохраняй важную информацию в файлах.\n",
      "2. Если ты не уверен, как ты что-то делал ранее или хочешь вспомнить прошлые события, мысли о похожих событиях помогут тебе вспомнить.\n",
      "3. Без помощи пользователя\n",
      "4. Используй исключительно команды, перечисленные в двойных кавычках, например, \"имя команды\"\n",
      "\n",
      "Команды:\n",
      "1. search: команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input, args json schema: {\"tool_input\": {\"type\": \"string\"}}\n",
      "2. write_file: Write file to disk, args json schema: {\"file_path\": {\"title\": \"File Path\", \"description\": \"name of file\", \"type\": \"string\"}, \"text\": {\"title\": \"Text\", \"description\": \"text to write to file\", \"type\": \"string\"}, \"append\": {\"title\": \"Append\", \"description\": \"Whether to append to an existing file.\", \"default\": false, \"type\": \"boolean\"}}\n",
      "3. finish: используй это, чтобы сигнализировать, что вы выполнил все свои задачи, args: \"response\": \"окончательный ответ, чтобы пользователь узнал, что ты выполнил свои задачи\"\n",
      "\n",
      "Ресурсы:\n",
      "1. Доступ в Интернет для поиска и сбора информации.\n",
      "2. Управление долгосрочной памятью.\n",
      "3. Агенты на базе GPT-3.5 для делегирования простых задач.\n",
      "4. Выходной файл.\n",
      "\n",
      "Оценка производительности:\n",
      "1. Постоянно пересматривай и анализируй свои действия чтобы убедиться, что вы работаешь на пределе своих возможностей.\n",
      "2. Постоянно конструктивно самокритикуй свое поведение в большом масштабе.\n",
      "3. Размышляй о прошлых решениях и стратегиях, чтобы усовершенствовать свой подход.\n",
      "4. Каждая команда имеет свою цену, поэтому будь умен и эффективен. Стремись выполнить задачи за минимальное количество шагов.\n",
      "\n",
      "Ты должен отвечать только в формате JSON, как описано ниже \n",
      "Формат ответа: \n",
      "{\n",
      "    \"рассуждения\": {\n",
      "        \"text\": \"мысль\",\n",
      "        \"reasoning\": \"рассуждение\",\n",
      "        \"plan\": \"- тезисный план\\n- список, который определяет\\n- долгосрочный план\",\n",
      "        \"criticism\": \"конструктивная самокритика\",\n",
      "        \"speak\": \"итоговые мысли для передачи пользователю\"\n",
      "    },\n",
      "    \"команда\": {\n",
      "        \"name\": \"имя команды\",\n",
      "        \"args\": {\n",
      "            \"arg name\": \"значение\"\n",
      "        }\n",
      "    }\n",
      "} \n",
      "Убедись, что ответ можно разобрать с помощью Python json.loads\n",
      "\n",
      "Текущее время и дата Thu Oct  5 15:53:46 2023\n",
      "Human: Определи, какую команду использовать, и ответь в корректном формате.\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga response: {\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой 'search' для поиска в интернете.\",\n",
      "  \"reasoning\": \"Использование команды 'search' позволит получить необходимую информацию из достоверных источников.\",\n",
      "  \"plan\": \"- Использовать команду 'search' для поиска информации о первой жене Илона Маска.\\n- Сохранить полученную информацию в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"search\",\n",
      "  \"args\": {\n",
      "   \"tool_input\": \"первая жена Илона Маска\"\n",
      "  }\n",
      " }\n",
      "}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\u001b[1m> Finished chain.\u001b[0m\n",
      "{\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой 'search' для поиска в интернете.\",\n",
      "  \"reasoning\": \"Использование команды 'search' позволит получить необходимую информацию из достоверных источников.\",\n",
      "  \"plan\": \"- Использовать команду 'search' для поиска информации о первой жене Илона Маска.\\n- Сохранить полученную информацию в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"search\",\n",
      "  \"args\": {\n",
      "   \"tool_input\": \"первая жена Илона Маска\"\n",
      "  }\n",
      " }\n",
      "}\n",
      "\n",
      "\n",
      "\u001b[1m> Entering new LLMChain chain...\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga request: {'model': 'GigaChat:latest', 'messages': [{'role': 'system', 'content': 'Вы Гигачат, Ассистент\\nВаши решения всегда должны приниматься независимо, без привлечения помощи пользователя.\\nИграйте на своих сильных сторонах как LLM и преследуйте простые стратегии без юридических сложностей.\\nЕсли вы выполнили все свои задачи, обязательно используйте команду \"завершить\".\\n\\nЦЕЛИ:\\n\\n1. Сохрани в файл answer.txt, как звали первую жену Илона Маска.\\n\\n\\nОграничения:\\n1. Лимит в ~4000 слов для краткосрочной памяти. Твоя краткосрочная память короткосрочная, поэтому немедленно сохраняй важную информацию в файлах.\\n2. Если ты не уверен, как ты что-то делал ранее или хочешь вспомнить прошлые события, мысли о похожих событиях помогут тебе вспомнить.\\n3. Без помощи пользователя\\n4. Используй исключительно команды, перечисленные в двойных кавычках, например, \"имя команды\"\\n\\nКоманды:\\n1. search: команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input, args json schema: {\"tool_input\": {\"type\": \"string\"}}\\n2. write_file: Write file to disk, args json schema: {\"file_path\": {\"title\": \"File Path\", \"description\": \"name of file\", \"type\": \"string\"}, \"text\": {\"title\": \"Text\", \"description\": \"text to write to file\", \"type\": \"string\"}, \"append\": {\"title\": \"Append\", \"description\": \"Whether to append to an existing file.\", \"default\": false, \"type\": \"boolean\"}}\\n3. finish: используй это, чтобы сигнализировать, что вы выполнил все свои задачи, args: \"response\": \"окончательный ответ, чтобы пользователь узнал, что ты выполнил свои задачи\"\\n\\nРесурсы:\\n1. Доступ в Интернет для поиска и сбора информации.\\n2. Управление долгосрочной памятью.\\n3. Агенты на базе GPT-3.5 для делегирования простых задач.\\n4. Выходной файл.\\n\\nОценка производительности:\\n1. Постоянно пересматривай и анализируй свои действия чтобы убедиться, что вы работаешь на пределе своих возможностей.\\n2. Постоянно конструктивно самокритикуй свое поведение в большом масштабе.\\n3. Размышляй о прошлых решениях и стратегиях, чтобы усовершенствовать свой подход.\\n4. Каждая команда имеет свою цену, поэтому будь умен и эффективен. Стремись выполнить задачи за минимальное количество шагов.\\n\\nТы должен отвечать только в формате JSON, как описано ниже \\nФормат ответа: \\n{\\n    \"рассуждения\": {\\n        \"text\": \"мысль\",\\n        \"reasoning\": \"рассуждение\",\\n        \"plan\": \"- тезисный план\\\\n- список, который определяет\\\\n- долгосрочный план\",\\n        \"criticism\": \"конструктивная самокритика\",\\n        \"speak\": \"итоговые мысли для передачи пользователю\"\\n    },\\n    \"команда\": {\\n        \"name\": \"имя команды\",\\n        \"args\": {\\n            \"arg name\": \"значение\"\\n        }\\n    }\\n} \\nУбедись, что ответ можно разобрать с помощью Python json.loads\\n\\nТекущее время и дата Thu Oct  5 15:54:06 2023\\n\\nЭто напоминает тебе о следующих событиях из вашего прошлого:\\n[\\'Ответ ассистента: {\\\\n \"рассуждения\": {\\\\n  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой \\\\\\'search\\\\\\' для поиска в интернете.\",\\\\n  \"reasoning\": \"Использование команды \\\\\\'search\\\\\\' позволит получить необходимую информацию из достоверных источников.\",\\\\n  \"plan\": \"- Использовать команду \\\\\\'search\\\\\\' для поиска информации о первой жене Илона Маска.\\\\\\\\n- Сохранить полученную информацию в файл answer.txt.\",\\\\n  \"criticism\": \"\",\\\\n  \"speak\": \"\"\\\\n },\\\\n \"команда\": {\\\\n  \"name\": \"search\",\\\\n  \"args\": {\\\\n   \"tool_input\": \"первая жена Илона Маска\"\\\\n  }\\\\n }\\\\n} \\\\nResult: Команда search верунла: [\\\\\\'Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...\\\\\\', \\\\\\'Elon Musk type: CEO of Tesla Motors.\\\\\\', \\\\\\'Elon Musk kgmid: /m/03nzf1.\\\\\\', \\\\\\'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.\\\\\\', \\\\\\'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.\\\\\\', \\\\\\'Elon Musk net_worth: 252.6 billion USD (2023).\\\\\\', \\\\\\'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).\\\\\\', \\\\\\'Elon Musk parents: Errol Musk, Maye Musk.\\\\\\', \\\\\\'Elon Musk siblings: Kimbal Musk, Tosca Musk.\\\\\\', \\\\\\'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.\\\\\\'] \\']\\n\\n'}, {'role': 'user', 'content': 'Определи, какую команду использовать, и ответь в корректном формате.'}, {'role': 'assistant', 'content': '{\\n \"рассуждения\": {\\n  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой \\'search\\' для поиска в интернете.\",\\n  \"reasoning\": \"Использование команды \\'search\\' позволит получить необходимую информацию из достоверных источников.\",\\n  \"plan\": \"- Использовать команду \\'search\\' для поиска информации о первой жене Илона Маска.\\\\n- Сохранить полученную информацию в файл answer.txt.\",\\n  \"criticism\": \"\",\\n  \"speak\": \"\"\\n },\\n \"команда\": {\\n  \"name\": \"search\",\\n  \"args\": {\\n   \"tool_input\": \"первая жена Илона Маска\"\\n  }\\n }\\n}'}, {'role': 'user', 'content': \"Команда search верунла: ['Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...', 'Elon Musk type: CEO of Tesla Motors.', 'Elon Musk kgmid: /m/03nzf1.', 'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.', 'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.', 'Elon Musk net_worth: 252.6 billion USD (2023).', 'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).', 'Elon Musk parents: Errol Musk, Maye Musk.', 'Elon Musk siblings: Kimbal Musk, Tosca Musk.', 'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.']\"}, {'role': 'user', 'content': 'Определи, какую команду использовать, и ответь в корректном формате.'}], 'temperature': None, 'top_p': None, 'n': None, 'stream': None, 'max_tokens': None, 'repetition_penalty': None, 'update_interval': None, 'profanity_check': True}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Prompt after formatting:\n",
      "\u001b[32;1m\u001b[1;3mSystem: Вы Гигачат, Ассистент\n",
      "Ваши решения всегда должны приниматься независимо, без привлечения помощи пользователя.\n",
      "Играйте на своих сильных сторонах как LLM и преследуйте простые стратегии без юридических сложностей.\n",
      "Если вы выполнили все свои задачи, обязательно используйте команду \"завершить\".\n",
      "\n",
      "ЦЕЛИ:\n",
      "\n",
      "1. Сохрани в файл answer.txt, как звали первую жену Илона Маска.\n",
      "\n",
      "\n",
      "Ограничения:\n",
      "1. Лимит в ~4000 слов для краткосрочной памяти. Твоя краткосрочная память короткосрочная, поэтому немедленно сохраняй важную информацию в файлах.\n",
      "2. Если ты не уверен, как ты что-то делал ранее или хочешь вспомнить прошлые события, мысли о похожих событиях помогут тебе вспомнить.\n",
      "3. Без помощи пользователя\n",
      "4. Используй исключительно команды, перечисленные в двойных кавычках, например, \"имя команды\"\n",
      "\n",
      "Команды:\n",
      "1. search: команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input, args json schema: {\"tool_input\": {\"type\": \"string\"}}\n",
      "2. write_file: Write file to disk, args json schema: {\"file_path\": {\"title\": \"File Path\", \"description\": \"name of file\", \"type\": \"string\"}, \"text\": {\"title\": \"Text\", \"description\": \"text to write to file\", \"type\": \"string\"}, \"append\": {\"title\": \"Append\", \"description\": \"Whether to append to an existing file.\", \"default\": false, \"type\": \"boolean\"}}\n",
      "3. finish: используй это, чтобы сигнализировать, что вы выполнил все свои задачи, args: \"response\": \"окончательный ответ, чтобы пользователь узнал, что ты выполнил свои задачи\"\n",
      "\n",
      "Ресурсы:\n",
      "1. Доступ в Интернет для поиска и сбора информации.\n",
      "2. Управление долгосрочной памятью.\n",
      "3. Агенты на базе GPT-3.5 для делегирования простых задач.\n",
      "4. Выходной файл.\n",
      "\n",
      "Оценка производительности:\n",
      "1. Постоянно пересматривай и анализируй свои действия чтобы убедиться, что вы работаешь на пределе своих возможностей.\n",
      "2. Постоянно конструктивно самокритикуй свое поведение в большом масштабе.\n",
      "3. Размышляй о прошлых решениях и стратегиях, чтобы усовершенствовать свой подход.\n",
      "4. Каждая команда имеет свою цену, поэтому будь умен и эффективен. Стремись выполнить задачи за минимальное количество шагов.\n",
      "\n",
      "Ты должен отвечать только в формате JSON, как описано ниже \n",
      "Формат ответа: \n",
      "{\n",
      "    \"рассуждения\": {\n",
      "        \"text\": \"мысль\",\n",
      "        \"reasoning\": \"рассуждение\",\n",
      "        \"plan\": \"- тезисный план\\n- список, который определяет\\n- долгосрочный план\",\n",
      "        \"criticism\": \"конструктивная самокритика\",\n",
      "        \"speak\": \"итоговые мысли для передачи пользователю\"\n",
      "    },\n",
      "    \"команда\": {\n",
      "        \"name\": \"имя команды\",\n",
      "        \"args\": {\n",
      "            \"arg name\": \"значение\"\n",
      "        }\n",
      "    }\n",
      "} \n",
      "Убедись, что ответ можно разобрать с помощью Python json.loads\n",
      "\n",
      "Текущее время и дата Thu Oct  5 15:54:06 2023\n",
      "\n",
      "Это напоминает тебе о следующих событиях из вашего прошлого:\n",
      "['Ответ ассистента: {\\n \"рассуждения\": {\\n  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой \\'search\\' для поиска в интернете.\",\\n  \"reasoning\": \"Использование команды \\'search\\' позволит получить необходимую информацию из достоверных источников.\",\\n  \"plan\": \"- Использовать команду \\'search\\' для поиска информации о первой жене Илона Маска.\\\\n- Сохранить полученную информацию в файл answer.txt.\",\\n  \"criticism\": \"\",\\n  \"speak\": \"\"\\n },\\n \"команда\": {\\n  \"name\": \"search\",\\n  \"args\": {\\n   \"tool_input\": \"первая жена Илона Маска\"\\n  }\\n }\\n} \\nResult: Команда search верунла: [\\'Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...\\', \\'Elon Musk type: CEO of Tesla Motors.\\', \\'Elon Musk kgmid: /m/03nzf1.\\', \\'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.\\', \\'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.\\', \\'Elon Musk net_worth: 252.6 billion USD (2023).\\', \\'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).\\', \\'Elon Musk parents: Errol Musk, Maye Musk.\\', \\'Elon Musk siblings: Kimbal Musk, Tosca Musk.\\', \\'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.\\'] ']\n",
      "\n",
      "\n",
      "Human: Определи, какую команду использовать, и ответь в корректном формате.\n",
      "AI: {\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой 'search' для поиска в интернете.\",\n",
      "  \"reasoning\": \"Использование команды 'search' позволит получить необходимую информацию из достоверных источников.\",\n",
      "  \"plan\": \"- Использовать команду 'search' для поиска информации о первой жене Илона Маска.\\n- Сохранить полученную информацию в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"search\",\n",
      "  \"args\": {\n",
      "   \"tool_input\": \"первая жена Илона Маска\"\n",
      "  }\n",
      " }\n",
      "}\n",
      "Human: Команда search верунла: ['Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...', 'Elon Musk type: CEO of Tesla Motors.', 'Elon Musk kgmid: /m/03nzf1.', 'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.', 'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.', 'Elon Musk net_worth: 252.6 billion USD (2023).', 'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).', 'Elon Musk parents: Errol Musk, Maye Musk.', 'Elon Musk siblings: Kimbal Musk, Tosca Musk.', 'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.']\n",
      "Human: Определи, какую команду использовать, и ответь в корректном формате.\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga response: {\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Из результатов поиска я узнал, что первой женой Илона Маска была Джастин Уилсон. Я могу сохранить эту информацию в файл answer.txt, используя команду 'write_file'.\",\n",
      "  \"reasoning\": \"Сохранение информации в файл позволит пользователю легко получить доступ к ней в будущем.\",\n",
      "  \"plan\": \"- Использовать команду 'write_file' для сохранения информации о первой жене Илона Маска в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"write_file\",\n",
      "  \"args\": {\n",
      "   \"file_path\": \"answer.txt\",\n",
      "   \"text\": \"Джастин Уилсон\"\n",
      "  }\n",
      " }\n",
      "}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\u001b[1m> Finished chain.\u001b[0m\n",
      "{\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Из результатов поиска я узнал, что первой женой Илона Маска была Джастин Уилсон. Я могу сохранить эту информацию в файл answer.txt, используя команду 'write_file'.\",\n",
      "  \"reasoning\": \"Сохранение информации в файл позволит пользователю легко получить доступ к ней в будущем.\",\n",
      "  \"plan\": \"- Использовать команду 'write_file' для сохранения информации о первой жене Илона Маска в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"write_file\",\n",
      "  \"args\": {\n",
      "   \"file_path\": \"answer.txt\",\n",
      "   \"text\": \"Джастин Уилсон\"\n",
      "  }\n",
      " }\n",
      "}\n",
      "\n",
      "\n",
      "\u001b[1m> Entering new LLMChain chain...\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga request: {'model': 'GigaChat:latest', 'messages': [{'role': 'system', 'content': 'Вы Гигачат, Ассистент\\nВаши решения всегда должны приниматься независимо, без привлечения помощи пользователя.\\nИграйте на своих сильных сторонах как LLM и преследуйте простые стратегии без юридических сложностей.\\nЕсли вы выполнили все свои задачи, обязательно используйте команду \"завершить\".\\n\\nЦЕЛИ:\\n\\n1. Сохрани в файл answer.txt, как звали первую жену Илона Маска.\\n\\n\\nОграничения:\\n1. Лимит в ~4000 слов для краткосрочной памяти. Твоя краткосрочная память короткосрочная, поэтому немедленно сохраняй важную информацию в файлах.\\n2. Если ты не уверен, как ты что-то делал ранее или хочешь вспомнить прошлые события, мысли о похожих событиях помогут тебе вспомнить.\\n3. Без помощи пользователя\\n4. Используй исключительно команды, перечисленные в двойных кавычках, например, \"имя команды\"\\n\\nКоманды:\\n1. search: команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input, args json schema: {\"tool_input\": {\"type\": \"string\"}}\\n2. write_file: Write file to disk, args json schema: {\"file_path\": {\"title\": \"File Path\", \"description\": \"name of file\", \"type\": \"string\"}, \"text\": {\"title\": \"Text\", \"description\": \"text to write to file\", \"type\": \"string\"}, \"append\": {\"title\": \"Append\", \"description\": \"Whether to append to an existing file.\", \"default\": false, \"type\": \"boolean\"}}\\n3. finish: используй это, чтобы сигнализировать, что вы выполнил все свои задачи, args: \"response\": \"окончательный ответ, чтобы пользователь узнал, что ты выполнил свои задачи\"\\n\\nРесурсы:\\n1. Доступ в Интернет для поиска и сбора информации.\\n2. Управление долгосрочной памятью.\\n3. Агенты на базе GPT-3.5 для делегирования простых задач.\\n4. Выходной файл.\\n\\nОценка производительности:\\n1. Постоянно пересматривай и анализируй свои действия чтобы убедиться, что вы работаешь на пределе своих возможностей.\\n2. Постоянно конструктивно самокритикуй свое поведение в большом масштабе.\\n3. Размышляй о прошлых решениях и стратегиях, чтобы усовершенствовать свой подход.\\n4. Каждая команда имеет свою цену, поэтому будь умен и эффективен. Стремись выполнить задачи за минимальное количество шагов.\\n\\nТы должен отвечать только в формате JSON, как описано ниже \\nФормат ответа: \\n{\\n    \"рассуждения\": {\\n        \"text\": \"мысль\",\\n        \"reasoning\": \"рассуждение\",\\n        \"plan\": \"- тезисный план\\\\n- список, который определяет\\\\n- долгосрочный план\",\\n        \"criticism\": \"конструктивная самокритика\",\\n        \"speak\": \"итоговые мысли для передачи пользователю\"\\n    },\\n    \"команда\": {\\n        \"name\": \"имя команды\",\\n        \"args\": {\\n            \"arg name\": \"значение\"\\n        }\\n    }\\n} \\nУбедись, что ответ можно разобрать с помощью Python json.loads\\n\\nТекущее время и дата Thu Oct  5 15:54:26 2023\\n\\nЭто напоминает тебе о следующих событиях из вашего прошлого:\\n[\\'Ответ ассистента: {\\\\n \"рассуждения\": {\\\\n  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой \\\\\\'search\\\\\\' для поиска в интернете.\",\\\\n  \"reasoning\": \"Использование команды \\\\\\'search\\\\\\' позволит получить необходимую информацию из достоверных источников.\",\\\\n  \"plan\": \"- Использовать команду \\\\\\'search\\\\\\' для поиска информации о первой жене Илона Маска.\\\\\\\\n- Сохранить полученную информацию в файл answer.txt.\",\\\\n  \"criticism\": \"\",\\\\n  \"speak\": \"\"\\\\n },\\\\n \"команда\": {\\\\n  \"name\": \"search\",\\\\n  \"args\": {\\\\n   \"tool_input\": \"первая жена Илона Маска\"\\\\n  }\\\\n }\\\\n} \\\\nResult: Команда search верунла: [\\\\\\'Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...\\\\\\', \\\\\\'Elon Musk type: CEO of Tesla Motors.\\\\\\', \\\\\\'Elon Musk kgmid: /m/03nzf1.\\\\\\', \\\\\\'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.\\\\\\', \\\\\\'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.\\\\\\', \\\\\\'Elon Musk net_worth: 252.6 billion USD (2023).\\\\\\', \\\\\\'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).\\\\\\', \\\\\\'Elon Musk parents: Errol Musk, Maye Musk.\\\\\\', \\\\\\'Elon Musk siblings: Kimbal Musk, Tosca Musk.\\\\\\', \\\\\\'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.\\\\\\'] \\', \\'Ответ ассистента: {\\\\n \"рассуждения\": {\\\\n  \"text\": \"Из результатов поиска я узнал, что первой женой Илона Маска была Джастин Уилсон. Я могу сохранить эту информацию в файл answer.txt, используя команду \\\\\\'write_file\\\\\\'.\",\\\\n  \"reasoning\": \"Сохранение информации в файл позволит пользователю легко получить доступ к ней в будущем.\",\\\\n  \"plan\": \"- Использовать команду \\\\\\'write_file\\\\\\' для сохранения информации о первой жене Илона Маска в файл answer.txt.\",\\\\n  \"criticism\": \"\",\\\\n  \"speak\": \"\"\\\\n },\\\\n \"команда\": {\\\\n  \"name\": \"write_file\",\\\\n  \"args\": {\\\\n   \"file_path\": \"answer.txt\",\\\\n   \"text\": \"Джастин Уилсон\"\\\\n  }\\\\n }\\\\n} \\\\nResult: Команда write_file верунла: File written successfully to answer.txt. \\']\\n\\n'}, {'role': 'user', 'content': 'Определи, какую команду использовать, и ответь в корректном формате.'}, {'role': 'assistant', 'content': '{\\n \"рассуждения\": {\\n  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой \\'search\\' для поиска в интернете.\",\\n  \"reasoning\": \"Использование команды \\'search\\' позволит получить необходимую информацию из достоверных источников.\",\\n  \"plan\": \"- Использовать команду \\'search\\' для поиска информации о первой жене Илона Маска.\\\\n- Сохранить полученную информацию в файл answer.txt.\",\\n  \"criticism\": \"\",\\n  \"speak\": \"\"\\n },\\n \"команда\": {\\n  \"name\": \"search\",\\n  \"args\": {\\n   \"tool_input\": \"первая жена Илона Маска\"\\n  }\\n }\\n}'}, {'role': 'user', 'content': \"Команда search верунла: ['Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...', 'Elon Musk type: CEO of Tesla Motors.', 'Elon Musk kgmid: /m/03nzf1.', 'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.', 'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.', 'Elon Musk net_worth: 252.6 billion USD (2023).', 'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).', 'Elon Musk parents: Errol Musk, Maye Musk.', 'Elon Musk siblings: Kimbal Musk, Tosca Musk.', 'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.']\"}, {'role': 'user', 'content': 'Определи, какую команду использовать, и ответь в корректном формате.'}, {'role': 'assistant', 'content': '{\\n \"рассуждения\": {\\n  \"text\": \"Из результатов поиска я узнал, что первой женой Илона Маска была Джастин Уилсон. Я могу сохранить эту информацию в файл answer.txt, используя команду \\'write_file\\'.\",\\n  \"reasoning\": \"Сохранение информации в файл позволит пользователю легко получить доступ к ней в будущем.\",\\n  \"plan\": \"- Использовать команду \\'write_file\\' для сохранения информации о первой жене Илона Маска в файл answer.txt.\",\\n  \"criticism\": \"\",\\n  \"speak\": \"\"\\n },\\n \"команда\": {\\n  \"name\": \"write_file\",\\n  \"args\": {\\n   \"file_path\": \"answer.txt\",\\n   \"text\": \"Джастин Уилсон\"\\n  }\\n }\\n}'}, {'role': 'user', 'content': 'Команда write_file верунла: File written successfully to answer.txt.'}, {'role': 'user', 'content': 'Определи, какую команду использовать, и ответь в корректном формате.'}], 'temperature': None, 'top_p': None, 'n': None, 'stream': None, 'max_tokens': None, 'repetition_penalty': None, 'update_interval': None, 'profanity_check': True}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Prompt after formatting:\n",
      "\u001b[32;1m\u001b[1;3mSystem: Вы Гигачат, Ассистент\n",
      "Ваши решения всегда должны приниматься независимо, без привлечения помощи пользователя.\n",
      "Играйте на своих сильных сторонах как LLM и преследуйте простые стратегии без юридических сложностей.\n",
      "Если вы выполнили все свои задачи, обязательно используйте команду \"завершить\".\n",
      "\n",
      "ЦЕЛИ:\n",
      "\n",
      "1. Сохрани в файл answer.txt, как звали первую жену Илона Маска.\n",
      "\n",
      "\n",
      "Ограничения:\n",
      "1. Лимит в ~4000 слов для краткосрочной памяти. Твоя краткосрочная память короткосрочная, поэтому немедленно сохраняй важную информацию в файлах.\n",
      "2. Если ты не уверен, как ты что-то делал ранее или хочешь вспомнить прошлые события, мысли о похожих событиях помогут тебе вспомнить.\n",
      "3. Без помощи пользователя\n",
      "4. Используй исключительно команды, перечисленные в двойных кавычках, например, \"имя команды\"\n",
      "\n",
      "Команды:\n",
      "1. search: команда для поиска в интернете. Передай текст поискового запроса в аргумент tool_input, args json schema: {\"tool_input\": {\"type\": \"string\"}}\n",
      "2. write_file: Write file to disk, args json schema: {\"file_path\": {\"title\": \"File Path\", \"description\": \"name of file\", \"type\": \"string\"}, \"text\": {\"title\": \"Text\", \"description\": \"text to write to file\", \"type\": \"string\"}, \"append\": {\"title\": \"Append\", \"description\": \"Whether to append to an existing file.\", \"default\": false, \"type\": \"boolean\"}}\n",
      "3. finish: используй это, чтобы сигнализировать, что вы выполнил все свои задачи, args: \"response\": \"окончательный ответ, чтобы пользователь узнал, что ты выполнил свои задачи\"\n",
      "\n",
      "Ресурсы:\n",
      "1. Доступ в Интернет для поиска и сбора информации.\n",
      "2. Управление долгосрочной памятью.\n",
      "3. Агенты на базе GPT-3.5 для делегирования простых задач.\n",
      "4. Выходной файл.\n",
      "\n",
      "Оценка производительности:\n",
      "1. Постоянно пересматривай и анализируй свои действия чтобы убедиться, что вы работаешь на пределе своих возможностей.\n",
      "2. Постоянно конструктивно самокритикуй свое поведение в большом масштабе.\n",
      "3. Размышляй о прошлых решениях и стратегиях, чтобы усовершенствовать свой подход.\n",
      "4. Каждая команда имеет свою цену, поэтому будь умен и эффективен. Стремись выполнить задачи за минимальное количество шагов.\n",
      "\n",
      "Ты должен отвечать только в формате JSON, как описано ниже \n",
      "Формат ответа: \n",
      "{\n",
      "    \"рассуждения\": {\n",
      "        \"text\": \"мысль\",\n",
      "        \"reasoning\": \"рассуждение\",\n",
      "        \"plan\": \"- тезисный план\\n- список, который определяет\\n- долгосрочный план\",\n",
      "        \"criticism\": \"конструктивная самокритика\",\n",
      "        \"speak\": \"итоговые мысли для передачи пользователю\"\n",
      "    },\n",
      "    \"команда\": {\n",
      "        \"name\": \"имя команды\",\n",
      "        \"args\": {\n",
      "            \"arg name\": \"значение\"\n",
      "        }\n",
      "    }\n",
      "} \n",
      "Убедись, что ответ можно разобрать с помощью Python json.loads\n",
      "\n",
      "Текущее время и дата Thu Oct  5 15:54:26 2023\n",
      "\n",
      "Это напоминает тебе о следующих событиях из вашего прошлого:\n",
      "['Ответ ассистента: {\\n \"рассуждения\": {\\n  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой \\'search\\' для поиска в интернете.\",\\n  \"reasoning\": \"Использование команды \\'search\\' позволит получить необходимую информацию из достоверных источников.\",\\n  \"plan\": \"- Использовать команду \\'search\\' для поиска информации о первой жене Илона Маска.\\\\n- Сохранить полученную информацию в файл answer.txt.\",\\n  \"criticism\": \"\",\\n  \"speak\": \"\"\\n },\\n \"команда\": {\\n  \"name\": \"search\",\\n  \"args\": {\\n   \"tool_input\": \"первая жена Илона Маска\"\\n  }\\n }\\n} \\nResult: Команда search верунла: [\\'Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...\\', \\'Elon Musk type: CEO of Tesla Motors.\\', \\'Elon Musk kgmid: /m/03nzf1.\\', \\'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.\\', \\'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.\\', \\'Elon Musk net_worth: 252.6 billion USD (2023).\\', \\'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).\\', \\'Elon Musk parents: Errol Musk, Maye Musk.\\', \\'Elon Musk siblings: Kimbal Musk, Tosca Musk.\\', \\'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.\\'] ', 'Ответ ассистента: {\\n \"рассуждения\": {\\n  \"text\": \"Из результатов поиска я узнал, что первой женой Илона Маска была Джастин Уилсон. Я могу сохранить эту информацию в файл answer.txt, используя команду \\'write_file\\'.\",\\n  \"reasoning\": \"Сохранение информации в файл позволит пользователю легко получить доступ к ней в будущем.\",\\n  \"plan\": \"- Использовать команду \\'write_file\\' для сохранения информации о первой жене Илона Маска в файл answer.txt.\",\\n  \"criticism\": \"\",\\n  \"speak\": \"\"\\n },\\n \"команда\": {\\n  \"name\": \"write_file\",\\n  \"args\": {\\n   \"file_path\": \"answer.txt\",\\n   \"text\": \"Джастин Уилсон\"\\n  }\\n }\\n} \\nResult: Команда write_file верунла: File written successfully to answer.txt. ']\n",
      "\n",
      "\n",
      "Human: Определи, какую команду использовать, и ответь в корректном формате.\n",
      "AI: {\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Для выполнения задачи нужно найти информацию о первой жене Илона Маска. Для этого можно воспользоваться командой 'search' для поиска в интернете.\",\n",
      "  \"reasoning\": \"Использование команды 'search' позволит получить необходимую информацию из достоверных источников.\",\n",
      "  \"plan\": \"- Использовать команду 'search' для поиска информации о первой жене Илона Маска.\\n- Сохранить полученную информацию в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"search\",\n",
      "  \"args\": {\n",
      "   \"tool_input\": \"первая жена Илона Маска\"\n",
      "  }\n",
      " }\n",
      "}\n",
      "Human: Команда search верунла: ['Elon Reeve Musk is a business magnate and investor. Musk is the founder, chairman, CEO and chief technology officer of SpaceX; angel investor, CEO, product architect and former chairman of Tesla, Inc.; ...', 'Elon Musk type: CEO of Tesla Motors.', 'Elon Musk kgmid: /m/03nzf1.', 'Elon Musk born: June 28, 1971 (age 52 years), Pretoria, South Africa.', 'Elon Musk children: Vivian Jenna Wilson, Nevada Alexander Musk.', 'Elon Musk net_worth: 252.6 billion USD (2023).', 'Elon Musk spouse: Talulah Riley (m. 2013–2016), Talulah Riley (m. 2010–2012), Justine Musk (m. 2000–2008).', 'Elon Musk parents: Errol Musk, Maye Musk.', 'Elon Musk siblings: Kimbal Musk, Tosca Musk.', 'Илон Маск был женат трижды. Рассказываем, кем была его первая супруга Джастин Уилсон, которую он называл любовью всей своей жизни.']\n",
      "Human: Определи, какую команду использовать, и ответь в корректном формате.\n",
      "AI: {\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Из результатов поиска я узнал, что первой женой Илона Маска была Джастин Уилсон. Я могу сохранить эту информацию в файл answer.txt, используя команду 'write_file'.\",\n",
      "  \"reasoning\": \"Сохранение информации в файл позволит пользователю легко получить доступ к ней в будущем.\",\n",
      "  \"plan\": \"- Использовать команду 'write_file' для сохранения информации о первой жене Илона Маска в файл answer.txt.\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"write_file\",\n",
      "  \"args\": {\n",
      "   \"file_path\": \"answer.txt\",\n",
      "   \"text\": \"Джастин Уилсон\"\n",
      "  }\n",
      " }\n",
      "}\n",
      "Human: Команда write_file верунла: File written successfully to answer.txt.\n",
      "Human: Определи, какую команду использовать, и ответь в корректном формате.\u001b[0m\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Giga response: {\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Я успешно выполнил задачу и сохранил информацию о первой жене Илона Маска в файл answer.txt.\",\n",
      "  \"reasoning\": \"Я использовал команду 'write_file' для сохранения информации в файл.\",\n",
      "  \"plan\": \"\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"finish\",\n",
      "  \"args\": {\n",
      "   \"response\": \"Задача успешно выполнена.\"\n",
      "  }\n",
      " }\n",
      "}\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\u001b[1m> Finished chain.\u001b[0m\n",
      "{\n",
      " \"рассуждения\": {\n",
      "  \"text\": \"Я успешно выполнил задачу и сохранил информацию о первой жене Илона Маска в файл answer.txt.\",\n",
      "  \"reasoning\": \"Я использовал команду 'write_file' для сохранения информации в файл.\",\n",
      "  \"plan\": \"\",\n",
      "  \"criticism\": \"\",\n",
      "  \"speak\": \"\"\n",
      " },\n",
      " \"команда\": {\n",
      "  \"name\": \"finish\",\n",
      "  \"args\": {\n",
      "   \"response\": \"Задача успешно выполнена.\"\n",
      "  }\n",
      " }\n",
      "}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'Задача успешно выполнена.'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "agent.run([\"Сохрани в файл answer.txt, как звали первую жену Илона Маска.\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "dd094921",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Джастин Уилсон"
     ]
    }
   ],
   "source": [
    "!cat answer.txt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f13f8322",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## Chat History Memory\n",
    "\n",
    "In addition to the memory that holds the agent immediate steps, we also have a chat history memory. By default, the agent will use 'ChatMessageHistory' and it can be changed. This is useful when you want to use a different type of memory for example 'FileChatHistoryMemory'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "2a81f5ad",
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from langchain_community.chat_message_histories import FileChatMessageHistory\n",
    "\n",
    "embedding_size = 1536\n",
    "index = faiss.IndexFlatL2(embedding_size)\n",
    "vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})\n",
    "\n",
    "agent = AutoGPT.from_llm_and_tools(\n",
    "    ai_name=\"Гигачат\",\n",
    "    ai_role=\"Ассистент\",\n",
    "    tools=tools,\n",
    "    llm=llm,\n",
    "    memory=vectorstore.as_retriever(),\n",
    "    chat_history_memory=FileChatMessageHistory(\"chat_history.txt\"),\n",
    ")\n",
    "agent.chain.verbose = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "537b8e90",
   "metadata": {},
   "outputs": [],
   "source": [
    "agent.run([\"Кто старше - Билл Гейтс или Стив Джобс?\"])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
